/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package persistencia;

import persistencia.exceptions.ExcepcionIntermediarioGenerico;
import java.sql.Timestamp;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import org.hibernate.Criteria;
import org.hibernate.exception.SQLGrammarException;

/**
 *
 * @author diego
 */
public class IntermediarioGenerico {

    private EntityManager em;

    public IntermediarioGenerico() {
    }

    /**
     * Guarda un objeto en la base de datos: actualiza si el objeto ya tiene oid
     *
     * @param obj
     * @throws Exception
     */
    public void guardar(ObjetoPersistente obj) throws ExcepcionIntermediarioGenerico {
        em = Conexion.getInstancia().getEntityManager();
        try {
            if (obj.getId() != null) {
                em.merge(obj);
            } else {
                em.persist(obj);
            }
        } catch (Exception ex) {
            throw new ExcepcionIntermediarioGenerico("Error al guardar objeto:\n"+ex.getMessage());
        }
    }

    public List buscar(Class object, Criteria criterio) {
        List<ObjetoPersistente> lista = null;
        try {
            lista = criterio.list();
        } catch (SQLGrammarException ex) {
            System.out.println(ex.getMessage());
        }
        return lista;
    }

    public void eliminar(ObjetoPersistente obj) throws ExcepcionIntermediarioGenerico {
        em = Conexion.getInstancia().getEntityManager();
        try {
            em.remove(obj);
        } catch (Exception ex) {
            throw new ExcepcionIntermediarioGenerico("Error al eliminar objeto:\n"+ex.getMessage());
        }
    }

    public Object getFecha() {
        em = Conexion.getInstancia().getEntityManager();
        Query consulta = (Query) em.createNativeQuery("select current_timestamp");
        Timestamp fecha = (Timestamp) consulta.getSingleResult();
        return fecha;
    }
}
